PreparedStatement হল Java Database Connectivity (JDBC) API-তে একটি ইন্টারফেস, যা SQL কুয়েরি বা স্টেটমেন্ট তৈরি এবং এক্সিকিউট করতে ব্যবহৃত হয়। এটি সাধারণ Statement
এর তুলনায় আরও নিরাপদ, দ্রুত, এবং দক্ষ। Spring JDBC তে PreparedStatement
ব্যবহৃত হয়, কারণ এটি ডেটাবেসের সাথে কার্যকরভাবে যোগাযোগ করতে সাহায্য করে এবং SQL ইনজেকশন থেকে রক্ষা করে।
PreparedStatement
হল একটি প্রিপেইরড (precompiled) SQL কুয়েরি, যা একবার তৈরি করা হলে পরে একাধিক বার ডেটাবেসে এক্সিকিউট করা যায়। এর মাধ্যমে SQL কুয়েরি চালানোর সময়, প্যারামিটারগুলির জন্য প্লেসহোল্ডার (যেমন ?
) ব্যবহার করা হয় এবং পরে ডাইনামিকভাবে প্যারামিটার ভ্যালু ইনপুট করা যায়। এটি SQL কুয়েরি এক্সিকিউশনের গতিবিধি দ্রুত করে এবং একই কুয়েরি বারবার ডেটাবেসে ব্যবহার করার ক্ষেত্রে পারফরম্যান্স উন্নত করে।
PreparedStatement
এই ধরনের ঝুঁকি কমায় কারণ এটি ইউজার ইনপুটকে ডেটাবেস কুয়েরি হিসেবে প্যারামিটারাইজ করে এবং SQL কোড থেকে আলাদা রাখে। ফলে ইউজার ইনপুট কখনোই কোড হিসেবে এক্সিকিউট হয় না।PreparedStatement
ব্যবহারে SQL কুয়েরি একবার কম্পাইল করা হয় এবং পরে শুধু প্যারামিটার পরিবর্তন করে একাধিক বার ব্যবহার করা যায়। এর ফলে কোডের পুনঃব্যবহারযোগ্যতা বাড়ে এবং কোড সহজ হয়।PreparedStatement
SQL কুয়েরি একবার কম্পাইল করার পরে, তা ডেটাবেসে ক্যাশে সেভ হয়ে থাকে। ফলে বারবার একই কুয়েরি চালানোর জন্য পুনরায় কম্পাইল করতে হয় না, যা পারফরম্যান্স বৃদ্ধি করে।PreparedStatement
ডেটাবেসের ভিন্নতার প্রতি আরো সহনশীল। SQL কুয়েরি একবার কম্পাইল হয়ে যাওয়ার কারণে, বিভিন্ন ডেটাবেসে এটি সহজে ব্যবহার করা যায়।PreparedStatement
এই সমস্যা প্রতিরোধ করতে পারে, কারণ এটি ইউজার ইনপুটকে একটি ভ্যালু হিসেবে গ্রহণ করে, যা কখনোই SQL কোড হিসেবে এক্সিকিউট হয় না।PreparedStatement
আমাদের SQL কুয়েরির ভিতরে এই প্যারামিটারগুলির জন্য প্লেসহোল্ডার (?
) ব্যবহার করতে দেয় এবং পরে সহজেই মান যোগ করতে সাহায্য করে।PreparedStatement
ডেটাবেসে SQL কুয়েরি কম্পাইল ও ক্যাশ করে রাখে, ফলে যদি আমরা একাধিকবার একই কুয়েরি চালাই, তাহলে কম্পাইলিং সময়ের প্রয়োজন হয় না এবং পারফরম্যান্স উন্নতি হয়।PreparedStatement
ব্যবহার করার ফলে অ্যাপ্লিকেশনটি SQL কুয়েরি এক্সিকিউশনের জন্য আরো দ্রুত এবং নিরাপদ হয়, যা প্রোডাকশন পরিবেশে গুরুত্বপূর্ণ।Spring JDBC এ JdbcTemplate
ক্লাস ব্যবহার করা হয়, যা PreparedStatement
এর সাথে ইন্টারঅ্যাক্ট করার জন্য একটি সিম্পল API প্রদান করে।
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import javax.sql.DataSource;
public class JdbcExample {
private JdbcTemplate jdbcTemplate;
public JdbcExample(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public void addUser(String name, String email) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
jdbcTemplate.update(sql, new PreparedStatementSetter() {
@Override
public void setValues(java.sql.PreparedStatement ps) throws java.sql.SQLException {
ps.setString(1, name); // First parameter
ps.setString(2, email); // Second parameter
}
});
}
}
এখানে:
JdbcTemplate
ব্যবহার করে আমরা PreparedStatement
তৈরি করছি।setValues()
মেথডে PreparedStatement
এর প্যারামিটারগুলো সেট করা হচ্ছে, যা SQL কুয়েরি এক্সিকিউট করার আগে ইনপুট মান হিসাবে পাস করা হয়।Spring JDBC এবং PreparedStatement
একসাথে ব্যবহৃত হলে, ডেটাবেস অপারেশনগুলির জন্য নিরাপদ এবং দক্ষ কোড লেখা সম্ভব হয়।
Read more